﻿begin tran
	set tran isolation level SERIALIZABLE;
	declare @SoLuongSanPham int, @SoLuongSanPhamDaDat int
	select @SoLuongSanPham=SoLuong from SanPham with (UPDLOCK) where ID=1 and ThoiGianBatDauBan<=GETDATE() and ThoiGianKetThucBan>=GETDATE()
	select @SoLuongSanPhamDaDat=SoLuong from NguoiDung_SanPham with (UPDLOCK) where ID=34
	if(@SoLuongSanPham is null)
	begin
		raiserror(N'Không thể cập nhật vì sản phẩm đã hết thời hạn bán',10,1)
		rollback tran
		return
	end
	if(@SoLuongSanPham+@SoLuongSanPhamDaDat-4<0)
	begin
		raiserror(N'Không thể cập nhật số lượng vượt quá số lượng còn lại của sản phẩm',10,1)
		rollback tran
		return
	end
	update SanPham set SoLuong=SoLuong+@SoLuongSanPhamDaDat-4 where ID=1
	update NguoiDung_SanPham set SoLuong=4 where ID=34
	if(@@ERROR<>0)
	begin
		raiserror(N'Đã có lỗi trong quá trình cập nhật đặt mua sản phẩm',10,1)
		rollback tran
		return
	end
commit tran